using System;
using System.Collections.Generic;
using UD.GRAL.Entity;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data.Common;
using System.Data;
using UD.Utilities.Exceptions;

namespace UD.GRAL.DataAccess
{
    public class InstitucionEducacionSuperiorDAL : GeneralDAL
    {
        public InstitucionEducacionSuperiorDAL()
        {
        }
        public int InsertarInstitucionEducacionSuperior(InstitucionEducacionSuperior pInstitucionEducacionSuperior)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_InstitucionEducacionSuperior_Insertar"))
                {
                    int vResultado;
                    vDataBase.AddOutParameter(vDbCommand, "@IdInstitucionEducacionSuperior", DbType.Int32, 18);
                    vDataBase.AddInParameter(vDbCommand, "@IdMunicipio", DbType.Int32, pInstitucionEducacionSuperior.IdMunicipio);
                    vDataBase.AddInParameter(vDbCommand, "@CodInstitucionEducacionSuperior", DbType.String, pInstitucionEducacionSuperior.CodInstitucionEducacionSuperior);
                    vDataBase.AddInParameter(vDbCommand, "@NombreInstitucion", DbType.String, pInstitucionEducacionSuperior.NombreInstitucion);
                    vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pInstitucionEducacionSuperior.Estado);
                    vDataBase.AddInParameter(vDbCommand, "@UsuarioCrea", DbType.String, pInstitucionEducacionSuperior.UsuarioCrea);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    pInstitucionEducacionSuperior.IdInstitucionEducacionSuperior = Convert.ToInt32(vDataBase.GetParameterValue(vDbCommand, "@IdInstitucionEducacionSuperior").ToString());
                    GenerarLogAuditoria(pInstitucionEducacionSuperior, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }
        public int ModificarInstitucionEducacionSuperior(InstitucionEducacionSuperior pInstitucionEducacionSuperior)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_InstitucionEducacionSuperior_Modificar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdInstitucionEducacionSuperior", DbType.Int32, pInstitucionEducacionSuperior.IdInstitucionEducacionSuperior);
                    vDataBase.AddInParameter(vDbCommand, "@IdMunicipio", DbType.Int32, pInstitucionEducacionSuperior.IdMunicipio);
                    vDataBase.AddInParameter(vDbCommand, "@CodInstitucionEducacionSuperior", DbType.String, pInstitucionEducacionSuperior.CodInstitucionEducacionSuperior);
                    vDataBase.AddInParameter(vDbCommand, "@NombreInstitucion", DbType.String, pInstitucionEducacionSuperior.NombreInstitucion);
                    vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pInstitucionEducacionSuperior.Estado);
                    vDataBase.AddInParameter(vDbCommand, "@UsuarioModifica", DbType.String, pInstitucionEducacionSuperior.UsuarioModifica);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pInstitucionEducacionSuperior, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }
        public int EliminarInstitucionEducacionSuperior(InstitucionEducacionSuperior pInstitucionEducacionSuperior)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_InstitucionEducacionSuperior_Eliminar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdInstitucionEducacionSuperior", DbType.Int32, pInstitucionEducacionSuperior.IdInstitucionEducacionSuperior);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pInstitucionEducacionSuperior, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }


        public InstitucionEducacionSuperior ConsultarInstitucionEducacionSuperior(int pIdInstitucionEducacionSuperior)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_InstitucionEducacionSuperior_Consultar"))
                {
                    vDataBase.AddInParameter(vDbCommand, "@IdInstitucionEducacionSuperior", DbType.Int32, pIdInstitucionEducacionSuperior);
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        InstitucionEducacionSuperior vInstitucionEducacionSuperior = new InstitucionEducacionSuperior();
                        while (vDataReaderResults.Read())
                        {
                            vInstitucionEducacionSuperior.IdInstitucionEducacionSuperior = vDataReaderResults["IdInstitucionEducacionSuperior"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdInstitucionEducacionSuperior"].ToString()) : vInstitucionEducacionSuperior.IdInstitucionEducacionSuperior;
                            vInstitucionEducacionSuperior.IdMunicipio = vDataReaderResults["IdMunicipio"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdMunicipio"].ToString()) : vInstitucionEducacionSuperior.IdMunicipio;
                            vInstitucionEducacionSuperior.CodInstitucionEducacionSuperior = vDataReaderResults["CodInstitucionEducacionSuperior"] != DBNull.Value ? Convert.ToString(vDataReaderResults["CodInstitucionEducacionSuperior"].ToString()) : vInstitucionEducacionSuperior.CodInstitucionEducacionSuperior;
                            vInstitucionEducacionSuperior.NombreInstitucion = vDataReaderResults["NombreInstitucion"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreInstitucion"].ToString()) : vInstitucionEducacionSuperior.NombreInstitucion;
                            vInstitucionEducacionSuperior.Estado = vDataReaderResults["Estado"] != DBNull.Value ? Convert.ToBoolean(vDataReaderResults["Estado"].ToString()) : vInstitucionEducacionSuperior.Estado;
                            vInstitucionEducacionSuperior.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vInstitucionEducacionSuperior.UsuarioCrea;
                            vInstitucionEducacionSuperior.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vInstitucionEducacionSuperior.FechaCrea;
                            vInstitucionEducacionSuperior.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vInstitucionEducacionSuperior.UsuarioModifica;
                            vInstitucionEducacionSuperior.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vInstitucionEducacionSuperior.FechaModifica;
                        }
                        return vInstitucionEducacionSuperior;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }

        public List<InstitucionEducacionSuperior> ConsultarInstitucionEducacionSuperiors(String pCodInstitucionEducacionSuperior, String pNombreInstitucion, Boolean? pEstado)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_InstitucionEducacionSuperiors_Consultar"))
                {
                    if(pCodInstitucionEducacionSuperior != null)
                         vDataBase.AddInParameter(vDbCommand, "@CodInstitucionEducacionSuperior", DbType.String, pCodInstitucionEducacionSuperior);
                    if(pNombreInstitucion != null)
                         vDataBase.AddInParameter(vDbCommand, "@NombreInstitucion", DbType.String, pNombreInstitucion);
                    if(pEstado != null)
                         vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pEstado);
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        List<InstitucionEducacionSuperior> vListaInstitucionEducacionSuperior = new List<InstitucionEducacionSuperior>();
                        while (vDataReaderResults.Read())
                        {
                                InstitucionEducacionSuperior vInstitucionEducacionSuperior = new InstitucionEducacionSuperior();
                            vInstitucionEducacionSuperior.IdInstitucionEducacionSuperior = vDataReaderResults["IdInstitucionEducacionSuperior"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdInstitucionEducacionSuperior"].ToString()) : vInstitucionEducacionSuperior.IdInstitucionEducacionSuperior;
                            vInstitucionEducacionSuperior.IdMunicipio = vDataReaderResults["IdMunicipio"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdMunicipio"].ToString()) : vInstitucionEducacionSuperior.IdMunicipio;
                            vInstitucionEducacionSuperior.CodInstitucionEducacionSuperior = vDataReaderResults["CodInstitucionEducacionSuperior"] != DBNull.Value ? Convert.ToString(vDataReaderResults["CodInstitucionEducacionSuperior"].ToString()) : vInstitucionEducacionSuperior.CodInstitucionEducacionSuperior;
                            vInstitucionEducacionSuperior.NombreInstitucion = vDataReaderResults["NombreInstitucion"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreInstitucion"].ToString()) : vInstitucionEducacionSuperior.NombreInstitucion;
                            vInstitucionEducacionSuperior.Estado = vDataReaderResults["Estado"] != DBNull.Value ? Convert.ToBoolean(vDataReaderResults["Estado"].ToString()) : vInstitucionEducacionSuperior.Estado;
                            vInstitucionEducacionSuperior.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vInstitucionEducacionSuperior.UsuarioCrea;
                            vInstitucionEducacionSuperior.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vInstitucionEducacionSuperior.FechaCrea;
                            vInstitucionEducacionSuperior.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vInstitucionEducacionSuperior.UsuarioModifica;
                            vInstitucionEducacionSuperior.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vInstitucionEducacionSuperior.FechaModifica;
                                vListaInstitucionEducacionSuperior.Add(vInstitucionEducacionSuperior);
                        }
                        return vListaInstitucionEducacionSuperior;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }
    }
}
